<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //1、map
        //map()：接收一个函数，将原数组中的所有元素用这个函数处理后放入新数组返回
        let arr = ['1', '20', '-5', '3']; 
        console.log(arr);//'1', '20', '-5', '3'

        //处理后的数组
        arr = arr.map(s => parseInt(s)); 
        console.log(arr)//1, 20, -5, 3

        //2、reduce
        //arr.reduce(callback,[initialValue]) 
        //reduce 为数组中的每一个元素依次执行回调函数，不包括数组中被删除或从未被赋值的元素
        /**
         * callback （执行数组中每个值的函数，包含四个参数） 
         * 1、previousValue （上一次调用回调返回的值，或者是提供的初始值（initialValue）） 
         * 2、currentValue （数组中当前被处理的元素） 
         * 3、index （当前元素在数组中的索引）
         * 4、array （调用 reduce 的数组） 
         * initialValue （作为第一次调用 callback 的第一个参数。）
         */
        const arr2 = [1,20,-5,3];
        //没有初始值,默认上次回调为0： 
        let result = arr2.reduce((a,b,index)=>{
            console.log(index+":上次调用回调返回的值"+a);
            console.log(index+":当前处理的元素："+b)
            return a+b;
        });
        console.log(result);//19
        console.log(arr.reduce((a,b)=>a+b));//19 
        console.log(arr.reduce((a,b)=>a*b));//-300

        //设置上次初始值为10
        let result2 = arr2.reduce((a,b,index)=>{
            console.log(index+":上次调用回调返回的值"+a);
            console.log(index+":当前处理的元素："+b)
            return a+b;
        },10);
        console.log(result2);//29
    </script>
</body>
</html>